;;
;; Copyright (c) 2019, 2020, Oracle and/or its affiliates. All rights reserved.
;; DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
;;
;; The Universal Permissive License (UPL), Version 1.0
;;
;; Subject to the condition set forth below, permission is hereby granted to any
;; person obtaining a copy of this software, associated documentation and/or
;; data (collectively the "Software"), free of charge and under any and all
;; copyright rights in the Software, and any and all patent rights owned or
;; freely licensable by each licensor hereunder covering either (i) the
;; unmodified Software as contributed to or provided by such licensor, or (ii)
;; the Larger Works (as defined below), to deal in both
;;
;; (a) the Software, and
;;
;; (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if
;; one is included with the Software each a "Larger Work" to which the Software
;; is contributed by such licensors),
;;
;; without restriction, including without limitation the rights to copy, create
;; derivative works of, display, perform, and distribute the Software and make,
;; use, sell, offer for sale, import, export, have made, and have sold the
;; Software and the Larger Work(s), and to sublicense the foregoing rights on
;; either these or other terms.
;;
;; This license is subject to the following condition:
;;
;; The above copyright notice and either this complete permission notice or at a
;; minimum a reference to the UPL must be included in all copies or substantial
;; portions of the Software.
;;
;; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
;; IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
;; FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
;; AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
;; LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
;; OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
;; SOFTWARE.
;;

;; This WebAssembly module was generated by emcc (emscripten) from the following C source:
;;
;; int doublesum(int n) {
;;     int sum = 0;
;;     for (int i = 0; i != n; ++i) {
;;         for (int j = 0; j != i * i; ++j) {
;;             sum += j;
;;         }
;;     }
;;     return sum;
;; }
;;
;; int main() {
;;     int sum = doublesum(100);
;;     return sum;
;; }
;;
;; In the following way:
;;
;; $ emcc -Os doublesum.c -o doublesum.wasm
;; $ wasm2wat doublesum.wasm > doublesum.wat
;;
(module
  (type (;0;) (func (result i32)))
  (type (;1;) (func (param i32) (result i32)))
  (func (;0;) (type 0) (result i32)
    call 1)
  (func (;1;) (type 0) (result i32)
    (local i32 i32 i32 i32 i32 i32)
    i32.const 1
    local.set 0
    i32.const -1
    local.set 1
    i32.const -2
    local.set 2
    loop  ;; label = @1
      local.get 1
      i64.extend_i32_u
      local.get 2
      i64.extend_i32_u
      i64.mul
      i64.const 8589934591
      i64.and
      i64.const 1
      i64.shr_u
      i32.wrap_i64
      local.get 1
      local.get 4
      i32.add
      i32.add
      local.get 4
      local.get 3
      local.get 3
      i32.mul
      select
      local.set 4
      local.get 0
      i32.const 2
      i32.add
      local.set 5
      local.get 0
      local.get 1
      i32.add
      local.set 1
      local.get 0
      local.get 2
      i32.add
      local.set 2
      local.get 3
      i32.const 1
      i32.add
      local.tee 3
      i32.const 100
      i32.ne
      if  ;; label = @2
        local.get 5
        local.set 0
        br 1 (;@1;)
      end
    end
    local.get 4)
  (func (;2;) (type 1) (param i32) (result i32)
    (local i32 i32)
    global.get 0
    local.set 2
    local.get 0
    global.get 0
    i32.add
    global.set 0
    global.get 0
    i32.const 15
    i32.add
    i32.const -16
    i32.and
    global.set 0
    local.get 2)
  (memory (;0;) 4)
  (global (;0;) (mut i32) (i32.const 2768))
  (export "memory" (memory 0))
  (export "_main" (func 0))
  (export "stackAlloc" (func 2)))
